uni

您所在的位置:网站首页 uniapp 微信支付v2 uni

uni

2024-03-02 08:04| 来源: 网络整理| 查看: 265

小程序 支付

先看官方文档 pay.weixin.qq.com/wiki/doc/ap…

知晓有那些比不可少的流程,之后后端确定返回的参数值,用于前端支付。参数值必须一一对应,不然支付会失败

uni.requestPayment({ timeStamp: data.timeStamp, //当前的时间 nonceStr: data.nonceStr, //随机字符串 package: data.package, //统一下单接口返回的 prepay_id 参数值 signType: data.signType, //签名算法,暂支持 MD5。 paySign: data.paySign, //签名 success(res) { console.log('成功', res); }, fail: (res) => { console.log('失败', res); }, })

小程序支付相对简单。支付的订单信息多要在后端生成。返回订单信息给前端调用支付API

APP支付

app支付方法和小程序基本相同,就是app要配置的地方不少

还是先看开发官方文档,基础的准备好。pay.weixin.qq.com/wiki/doc/ap…

之后在uni的目录中找到manifest.json 打开 选择app模卡--支付前面打个勾

这边只对微信支付,所以微信支付勾上 ,把微信平台的appid 放到对应的输入框里面

//获取服务供应商 uni.getProvider({ service: 'payment', success: (res) => { console.log('getProvider', res) //服务类型:payment console.log('服务类型', res.provider) //返回的是 微信 支付宝 //在这里请求接口拿到返回的订单数据 用于调起支付 that.sponsorPro(res.data) // 支付 res.data 为后端返回的订单信息 //这个判断 是否有微信 不要加 真机调试不会过 测试可以过 if(res.provider.indexOf('wxpay')){} } })

发起支付

md5().toUpperCase() 截取签名前30位为 小写转大写

md5为单独的一个js,代码在最后

sponsorPro(data) { //data 为后端的参数 let info = { "appid": data.appId, "partnerid": data.mchid, "package": 'Sign=WXPay', "package": data.package, "noncestr": data.noncestr, "timestamp": data.timestamp, // "sign": data.paySign, "sign": md5(data.sign).toUpperCase(), } console.log('发起支付', info); uni.requestPayment({ provider: 'wxpay', signType: "MD5", orderInfo: info, success(res) { console.log('成功:' + JSON.stringify(res)); }, fail(err) { console.log('失败:' + JSON.stringify(err)); } }) }

info 的参数 和官方返回的参数必须一致

判断微信是否安装 if (plus.runtime.isApplicationExist({ pname: 'com.tencent.mm', action: 'weixin://' })) { console.log("微信应用已安装"); } else { console.log("微信应用未安装"); }

可以用上面这个判断微信是否安装

官方地址 www.html5plus.org/doc/zh_cn/r…

微信支付调用失败 [payment微信:-1]General errors","errCode":-100,"code":-100

payment微信:-1 是微信的错误代码提示

"errCode":-100," code":-100 为uni-app 错误代码提示

特别要注意第一次提交时报的是什么错误,这样对症下药

要是提示: 包名(签名)与开放平台包名(签名)不一致 ,先检查打包的包名(签名)是什么,然后对比与线上的名字一致

app签名查看工具

下载地址 developers.weixin.qq.com/doc/oplatfo…

下载安装到手机 打开 输入包名 签名

要先打包,把你需要获取签名的包安装到手机上,然后安装签名获取工具打开输入包名

ios支付

要先创建一个uni-app 账号 开通 云服务空间和开通前端网页托管

详情看官方流程 uniapp.dcloud.io/api/plugins…

在添加域名时报---设置一个三级域名就好

附:md5.js源码

在页面中引用 import md5 from '../../common/md5.js'

form 后面为存放地址

/* * JavaScript MD5 * https://github.com/blueimp/JavaScript-MD5 * * Copyright 2011, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * https://opensource.org/licenses/MIT * * Based on * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* global define */ ;(function ($) { 'use strict' /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safeAdd (x, y) { var lsw = (x & 0xffff) + (y & 0xffff) var msw = (x >> 16) + (y >> 16) + (lsw >> 16) return (msw > (32 - cnt)) } /* * These functions implement the four basic operations the algorithm uses. */ function md5cmn (q, a, b, x, s, t) { return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b) } function md5ff (a, b, c, d, x, s, t) { return md5cmn((b & c) | (~b & d), a, b, x, s, t) } function md5gg (a, b, c, d, x, s, t) { return md5cmn((b & d) | (c & ~d), a, b, x, s, t) } function md5hh (a, b, c, d, x, s, t) { return md5cmn(b ^ c ^ d, a, b, x, s, t) } function md5ii (a, b, c, d, x, s, t) { return md5cmn(c ^ (b | ~d), a, b, x, s, t) } /* * Calculate the MD5 of an array of little-endian words, and a bit length. */ function binlMD5 (x, len) { /* append padding */ x[len >> 5] |= 0x80 >> 9 > 5] >>> (i % 32)) & 0xff) } return output } /* * Convert a raw string to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function rstr2binl (input) { var i var output = [] output[(input.length >> 2) - 1] = undefined for (i = 0; i < output.length; i += 1) { output[i] = 0 } var length8 = input.length * 8 for (i = 0; i < length8; i += 8) { output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) 16) { bkey = binlMD5(bkey, key.length * 8) } for (i = 0; i < 16; i += 1) { ipad[i] = bkey[i] ^ 0x36363636 opad[i] = bkey[i] ^ 0x5c5c5c5c } hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8) return binl2rstr(binlMD5(opad.concat(hash), 512 + 128)) } /* * Convert a raw string to a hex string */ function rstr2hex (input) { var hexTab = '0123456789abcdef' var output = '' var x var i for (i = 0; i < input.length; i += 1) { x = input.charCodeAt(i) output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) } return output } /* * Encode a string as utf-8 */ function str2rstrUTF8 (input) { return unescape(encodeURIComponent(input)) } /* * Take string arguments and return either raw or hex encoded strings */ function rawMD5 (s) { return rstrMD5(str2rstrUTF8(s)) } function hexMD5 (s) { return rstr2hex(rawMD5(s)) } function rawHMACMD5 (k, d) { return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d)) } function hexHMACMD5 (k, d) { return rstr2hex(rawHMACMD5(k, d)) } function md5 (string, key, raw) { if (!key) { if (!raw) { return hexMD5(string) } return rawMD5(string) } if (!raw) { return hexHMACMD5(key, string) } return rawHMACMD5(key, string) } if (typeof define === 'function' && define.amd) { define(function () { return md5 }) } else if (typeof module === 'object' && module.exports) { module.exports = md5 } else { $.md5 = md5 } })(this) 附送app 端 拨打电话

小程序拨打电话就不多说了

app端 官方介绍: www.html5plus.org/doc/zh_cn/d…

直接真机调试,模拟器会失败

plus.device.dial(phone); // phone 为要拨打的号码

uni-app 真机调试(选择自定义基座)

(标准基座)开发者设置的第三方SDK配置信息不会生效。

(标准基座)安装到手机上app名字是“HBuilder”。支付不会生效

(自定义基座)包名会变成你项目的名字,这时支付,分享等多会生效



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3